דף הדרכה ליצירת שרת/ לקוח עם GUI

Similar documents
ASP.Net Web API.

- MEAN Stack חזרה. MongoDB - as the database Express - as the web framework AngularJS - as the frontend framework NodeJS- as the server platform

Simple Web Service. namespace MyService { public class Service1 : System.Web.Services.WebService {

גירסה

Algorithms. Intro2CS week 5

לתיכנות עם MATLAB Lecture 5: Boolean logic and Boolean expressions

Introduction to Programming in C תרגול 8

מבוא לתכנות בשפת C. Tzachi (Isaac) Rosen

לתיכנות עם MATLAB Lecture 5: Boolean logic and Boolean expressions

Computer Programming A תרגול 9

מבוא לתכנות ב- JAVA מעבדה 2

הנכות 1 םוכיס לוגרת 13 1

עקרונות שפות תכנות 2016 תרגול 8 Type Inference System. Substitution Interpreter.

מבוא לתכנות ב- JAVA תרגול 7

אדמיניסטרציה. O O O

מבוא למדעי המחשב תירגול 2: מבוא למדעי המחשב מ' - תירגול 2

תוכנה 1. תרגול מספר 11: Static vs. Dynamic Binding מחלקות מקוננות Nested Classes

$ gcc check.c. $ a.out. $ gcc check.c -o check. $ check. $ gcc -Wall check.c -o check. #include <stdio.h>

תרגילים ופתרונות בשפת - C הסתעפויות

Tkinter Part II: Buttons, Lambda & Dynamic Content

ממשק משתמש גרפי בעזרת SWT

פתרון מוצע לבחינת מה"ט ב_שפת c מועד אביב תשע"ח, פברואר 8102 מחבר: מר שייקה בילו, מכללת אורט רחובות

מערכים שעור מס. 4 כל הזכויות שמורות דר ' דרור טובי המרכז האוניברסיטאי אריאל 1

9. טופס הזמנת מוצרים טופס ההזמנה הוא טופס מורכב. מעורבים בו 4 טבלאות נתונים. קשרי הגומלין בין הטבלאות : הטופס :

מבוא למדעי המחשב תירגול 3:

תוכנה 1 תרגול מספר 10: תרגיל חזרה חברת הייטק בית הספר למדעי המחשב אוניברסיטת תל אביב

פרק 15 טיפוס חדש: מבנים שימוש במבנים שימוש במבנים שימוש במבנים

ממשק משתמש גרפי בעזרת SWT. תוכנה 1 בשפת Java

הנכות 1 םוכיס לוגרת 13 1

סטודנטים יקרים הפתרונות מוגשים בסרטוני וידאו המלווים בהסבר קולי, כך שאתם רואים את התהליכים בצורה מובנית, שיטתית ופשוטה, ממש כפי שנעשה בשיעור פרטי.

2. (לדוגמא: יחידת הספריה (my_unit.c. #include "my_unit.c" היחידה (חלק ה-.(prototype לדוגמא:. my_unit.h הכותר. הוראת מדעי המחשב, אוניברסיטת תל-אביב

סכום (סדרת ערכים) אחרת - דוגמא: סכום-ספרות (num) אם < 10 num החזר 1 או אם = 0 = num החזר 0 public static int numofdigits (int num)

ת ונכת סרוק תורשוקמ תומישר :יעישת רועיש 1

קורס תכנות שיעור שישי: מחרוזות, מצביעים

Object-Oriented Analysis and Design

מבוא למדעי המחשב תרגול 10 Comparator, Comparable, Binary Trees

מצליחה. 1. int fork-bomb() 2. { 3. fork(); 4. fork() && fork() fork(); 5. fork(); printf("bla\n"); 8. return 0; 9. }

שאלה 1 מהו הפלט של התוכנית הבאה:

הנכות 1 םוכיס לוגרת 13 1

Engineering Programming A

עמוד 1 (תאריך ( âùéä ער äìàù בכל השאלות ניתן להניח שהקלט תקין. 100 íåëñ חורף :

Nir Adar

קורס תכנות כתובות בזיכרון כתובות בזכרון מצביעים וכתובות מצביעים וכתובות שיעור שביעי: מבנים, הקצאת זיכרון דינאמית האופרטור &

תרגול 4 פונקציות. מבנה של פונקציה: public static <return value type> <function name> (<arg1 type> <arg1>, <arg2 type> <arg2>, ) { <function body> }

תוך כדי ריצה יכולה לבוא אירוע שמפסיק את מהלך הריצה )או באופן לא רצוני כגון שיחה נכנסת או באופן רצוני על ידי זימון )pauseapp()

תוכנה 1. תרגול מס' 3 עבודה עם מחרוזות )Strings( מתודות )Methods( העברת פרמטרים

ב ה צ ל ח ה! אוניברסיטת בן גוריון בנגב מספר נבחן : תאריך המבחן: כ"ה תשרי תשע"ח 15/10/17 שמות המורים: ציון סיקסיק מיועד לתלמידי : א'

מבוא לתכנות ב- JAVA תרגול 6

קורס תכנות שיעור שני: שימוש במשתנים,

במידה ולסעיף ניתנה תשובה ובנוסף נרשם לגבי הסעיף לא יודע/ת אזי הניקוד שיינתן

תכנות מתקדם בשפת C משתנים

מבוא למדעי המחשב תרגול 10 הממשקים Iterator, Iterable Binary trees

מבוא לתכנות ב- JAVA מעבדה 3. Ipc161-lab3

Teaching London Computing

התחברות לשרת TeamSpeak3. VFS-Virtual Flight School

מבוא לתכנות ב- JAVA מעבדה 4

ספרית התבניות הסטנדרטית (STL) כתיבת אלגוריתמים גנריים מצביעים חכמים. .vector. list iterator נכיר תחילה את האוסף הפשוט ביותר בספריה

תזכורת: עץבינארי מבוא למדעי המחשב הרצאה 24: עצי חיפוש בינאריים

Level 3 Computing Year 2 Lecturer: Phil Smith

תוכנה 1 תרגול מספר 13

תוכנה 1 תרגול מספר 13

מבוא לתכנות תוכנית שעור מס. 1 1 דר' דרור טובי, המרכז האוניברסיטאי אריאל בשומרון.

מבוא למדעי המחשב תרגול 8 רשימה משורשרת כללית, Comparator

תוכנה 1 בשפת Java נושאים שונים בהורשה רובי בוים ומתי שמרת בית הספר למדעי המחשב אוניברסיטת תל אביב

Programming in C תרגול 8

ד"ר אחיה אליסף מר בני לוטטי פרופ' אנדרי שרף הנדסת תוכנה

לתיכנות עם MATLAB Lecture 5: Boolean logic and Boolean expressions

תוכנה 1 סמסטר א' תשע"א

קורס תכנות בשיעור הקודם למדנו על רקורסיה שיעור שישי: מערכים פונקציה רקורסיבית שאלה חישוב נוסחאות רקורסיביות בשפת C

Advanced Lab in Computer Communications Meeting 1 Layers Model, Codes, Ethernet. Instructor: Tom Mahler

גיליון תשובות מספר נבחן:

Mid Unit Review. Of the four learning outcomes for this unit, we have covered the first two. 1.1 LO1 2.1 LO2 LO2

Communication Networks ( ) / Spring 2011 The Blavatnik School of Computer Science, Tel-Aviv University. Allon Wagner

Practical Session 2 Constants Don t Matter!!!

הערה על הפתרון: בתנאי הקדם אין לבדוק שהמשחק לא השתנה. המתודה מוגדרת היטב ויש לה ערך החזרה למקרה זה.

מבוא לתכנות ב- JAVA תרגול 5. Ipc161- practical session 5

Tutorial 10. Introduction to C++ שימו

קורס תכנות רשימה מקושרת דוגמה: חיפוש מעבר על רשימה דוגמא: שחרור רשימה מקושרת דוגמא: הוספת אברים שלא בהתחלה

אילנית אפק מנהלת קבוצת IBM Rational

LaserJet Enterprise M506

תרגול 3 מערכים ופונקציות

פתרון מוצע לבחינה בשפת C של מה"ט מועד אביב תשע"ז, פברואר 2017 מחבר: מר עסאקלה שאדי, מכללת אורט בראודה

היצביט ומ - ןוכית ת וי נבת

Java פעולות עוברות בירושה סביבת יסודות מדעי המחשב נספח הורשה

כתבו קוד ב- 3 קבצי ה hpp (כתבו כהערה את שם הקובץ מעל) כך שהקוד יהיה תקין ובסגנון טוב. אין חובה

חוברת תרגילים לתרגול יסודות התכנות

- מבחן. - 4 עבודות ב- JAVA. הגשה בזוגות דרך ה- System Submission

Practical Session - Heap

שפת XML הפכה להיות נפוצה ובעלת תפקידים רבים, במיוחד עקב גמישותה הרבה:

-7h3r3 15 n0 5p00n- אתגר השב"כ מאת Dvd848 ו- YaakovCohen88

Practical Session No. 14 Topological sort,amortized Analysis

משתנים שעור מס. 2 כל הזכויות שמורות דר ' דרור טובי המרכז האוניברסיטאי אריאל 1

Computer Communication Networks Socket Programming

תרגול מספר 3: מערכים

תכנות מונחה עצמים משחקים תשע"ו

מבוא למדעי המחשב 2018 תרגול 7

תוכנית יומית לכנס: התכנסות וארוחת בוקר הפסקה קצרה של קפה

הרצאה מספר: GUI components רכיבים נוספים חלק ג' צבי מלמד מכללת הדסה/מכללה חרדית כל הזכויות שמורות תכנות ג'אווה + אינטרנט JAVA & WEB PROGRAMMING

Project subject: Improving an OCR program. Project instructo: Hananel Hazan. Project performed by: Alex Heifetz & Vadim Maizlin

תוכנה 1 תרגול מספר 10: תרגיל חברת הייטק בית הספר למדעי המחשב אוניברסיטת תל אביב

Transcription:

דף הדרכה ליצירת שרת/ לקוח עם GUI בשיעורים הקודמים למדנו כיצד ליצור שרת לקוח פשוט, ויצירת טופס המכיל פקדים כלומר יצירת GUI למשתמש, בשיעור זה נרצה להראות את הדרך לשילוב בין השניים כלומר ליצור לקוח client שיקליד את נתוני ההתחברות ( שם משתמש,,IP ) PORT בתיבות טקסט ועל ידי לחיצה על כפתור יתחבר לשרת. דוגמא למסך התחברות לשרת תזכורת : תוכנית השרת : server_socket = socket.socket() server_socket.bind(('0.0.0.0',8002)) server_socket.listen(1) print ("the server is connected") (client_socket,client_address) = server_socket.accept() client_name = client_socket.recv(1024) client_socket.send('hello '+client_name) client_socket.close() server_socket.close()

תוכנית הלקוח : my_socket = socket.socket() my_socket.connect(('192.168.43.24',8002)) my_socket.send('anat') print data my_socket.close() # '127.0.0.1' הוספת טופס: import Tkinter as tk frm_main = tk.tk() frm_main.title('client - Calc') הוספת כפתור: btn= tk.button(panel, text="connect", command=btn_send_click) ) פונקציות הכפתור : def btn_ok_click(): return lbl_name = tk.label(panel, text="user name", fg="blue", הוספת תווית : txt_name = tk.entry(panel) txt_name.insert(0, " ") txt_name.pack() הוספת תיבת טקסט:

tkinter כתובה אחרת האות הראשונה גדולה בואו נשלב בין השניים... נתחיל עם יצירת טופס והגדרת רקע שימו לב שבפייתון 2 ובפייתון 3 הסיפריה בפייתון 2 ולכן נטפל גם בזה try: # Python2 import Tkinter as tk except ImportError: # Python3 import tkinter as tk frm_main = tk.tk() frm_main.title('client - Calc') image = tk.photoimage(file="c:\elza1.gif") # get the width and height of the image w = image.width() h = image.height() # position coordinates of frm_main 'upper left corner' x = 200 y = 50 # size the frm_main to fit the image frm_main.geometry("%dx%d+%d+%d" % (w, h, x, y)) # tk.frame has no image argument # so use a label as a panel/frame panel = tk.label(frm_main, image=image) panel.pack(side='top', fill='both', expand='yes') הגדרת הטופס הוספת רקע הגדרנו panel שהוא בעצם תווית שישמש אותנו לשים את תמונת הרקע על הטופס

הוספת תוויות ותיבות טקסט לתוכםם נקלוט את שם המשתמש, IP PORT, lbl_name = tk.label(panel, text="user name", fg="blue", txt_name = tk.entry(panel) txt_name.insert(0, " ") txt_name.pack() lbl_ip = tk.label(panel, text="server ip", fg="blue", txt_srv_ip = tk.entry(panel) txt_srv_ip.insert(0, " ") txt_srv_ip.pack() lbl_port = tk.label(panel, text="server port", fg="blue", txt_srv_port = tk.entry(panel) txt_srv_port.insert(0, " ") txt_srv_port.pack() הוספת כפתור התחבר connect btn_ok = tk.button(panel, text="connect", width=10, command=btn_ok_click) # Add a button to the window... btn_ok.pack() my_socket = socket.socket() הפונקציה שהכפתור יבצע היא : def btn_ok_click(): port=int(txt_srv_port.get()) ip=txt_srv_ip.get() user_name=txt_name.get() data = user_name + "," + ip + ", " + str(port) txt_info.insert(0, data) my_socket.connect((ip,port)) # or your friend IP like '192.168.43.24' my_socket.send(user_name) lbl_tmp = tk.label(panel,text=data).pack() #my_socket.close() return הסבר : בפונקציה זו הוגדרו 3 משתנים : int והומר ל txt_srv_port המקבל את הערך שהוקלד בתיבת הטקסט port txt_srv_ip המקבל את הערך שהוקלד בתיבת הטקסט - Ip txt_name המקבל את הערך שהוקלד בתיבת הטקסט - user_name לאחר שיש לנו את נתוני ההתחברות הבסיסיים נשתמש בחיבור שנלמד בצד לקוח על מנת להתחבר לשרת

נרצה לשפר את התרגיל באופן הבא : לאחר ההתחברות הראשונית של הלקוח לשרת, הלקוח ישלח לשרת פעולה חשבונית כלשהי ועל השרת להחזיר תשובה לדוגמא : הלקוח שולח : 2 3 + השרת יחזיר תשובה 5 נוסף ללקוח תיבת טקסט שבתוכנה יכול להקליד את הפעולה החשבונית וכפתור שליחה txt_mess = tk.entry(panel) txt_mess.insert(0, " ") txt_mess.pack() btn_send = tk.button(panel, text="send", width=10, command=btn_send_click) # Add a button to the window... btn_send.pack() def btn_send_click(): הפונקציה של הכפתור תיהיה my_socket.send(txt_mess.get()) lbl_tmp = tk.label(panel,text=data).pack()

כמובן שהשרת ישתנה בהתאם ועכשיו הוא נראה כך : server_socket = socket.socket() server_socket.bind(('0.0.0.0',8004)) חלק זה מטפל בהתחברות הראשונית של הלקוח server_socket.listen(1) print ("the server is connected") (client_socket,client_address) = server_socket.accept() client_name = client_socket.recv(1024) print client_name+" connected" client_socket.send('hello '+client_name) חלק זה מטפל בקבלת הפעולה החשבונית ניתוח ושליחת תשובה ללקוח while True: client_str = client_socket.recv(1024) client_str = str(client_str).replace(" ",":") tmpstr=str(client_str).split(":") if tmpstr[1]=="+": client_socket.send(str(int(tmpstr[0])+int(tmpstr[2]))) elif tmpstr[1]=="-": client_socket.send(str(int(tmpstr[0])-int(tmpstr[2]))) elif tmpstr[1]=="*": client_socket.send(str(int(tmpstr[0])*int(tmpstr[2]))) elif tmpstr[1]=="/": client_socket.send(str(int(tmpstr[0])/int(tmpstr[2]))) # client_socket.send(client_name) client_socket.close() server_socket.close()

נסתכל על התוכנית במלואה : צד לקוח : try: # Python2 import Tkinter as tk except ImportError: # Python3 import tkinter as tk my_socket = socket.socket() def btn_ok_click(): port=8004#int(txt_srv_port.get()) ip="192.168.1.2"#txt_srv_ip.get() user_name="anat"#txt_name.get() data = user_name + "," + ip + ", " + str(port) txt_info.insert(0, data) my_socket.connect((ip,port)) # or your friend IP like '192.168.43.24' my_socket.send(user_name) lbl_tmp = tk.label(panel,text=data).pack() #my_socket.close() return def btn_send_click(): my_socket.send(txt_mess.get()) lbl_tmp = tk.label(panel,text=data).pack() """ init_form """ frm_main = tk.tk() frm_main.title('client - Calc') image = tk.photoimage(file="c:\elza1.gif") # get the width and height of the image w = image.width() h = image.height() # position coordinates of frm_main 'upper left corner' x = 200 y = 50 # size the frm_main to fit the image frm_main.geometry("%dx%d+%d+%d" % (w, h, x, y)) # tk.frame has no image argument # so use a label as a panel/frame panel = tk.label(frm_main, image=image) panel.pack(side='top', fill='both', expand='yes') """ put labels and button on form """ #button = tk.button(panel, text='button widget') #button.pack(side='top', pady=5) lbl_name = tk.label(panel, text="user name", fg="blue",

txt_name = tk.entry(panel) txt_name.insert(0, " ") txt_name.pack() lbl_ip = tk.label(panel, text="server ip", fg="blue", txt_srv_ip = tk.entry(panel) txt_srv_ip.insert(0, " ") txt_srv_ip.pack() lbl_port = tk.label(panel, text="server port", fg="blue", txt_srv_port = tk.entry(panel) txt_srv_port.insert(0, " ") txt_srv_port.pack() btn_ok = tk.button(panel, text="connect", width=10, command=btn_ok_click) # Add a button to the window... btn_ok.pack() txt_info = tk.entry(panel) txt_info.insert(0, " ") txt_info.pack() txt_mess = tk.entry(panel) txt_mess.insert(0, " ") txt_mess.pack() btn_send = tk.button(panel, text="send", width=10, command=btn_send_click) # Add a button to the window... btn_send.pack() panel.image = image frm_main.mainloop() #my_socket.close()